package parser.prestige.meldunek.xml;

import parser.prestige.AbstractNode;
import parser.prestige.IXmlElement;

import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.XMLEvent;

/**
 * Created with IntelliJ IDEA.
 * User: marcin.kaluza
 * Date: 29.11.13
 * Time: 12:34
 * To change this template use File | Settings | File Templates.
 */
public class Meldunek extends AbstractNode implements IXmlElement {
    private String nrMeldunku;
    private String zlecenie;
    private String operacja;
    private String kodOperacji;
    private String lpOperacji;
    private String idPracownik;
    private String ilosc;
    private String precyzja;
    private String data;
    private String czas;
    private String uwagi;
    //TODO: sprawdzic czy tu potrzebne beda listy czy kazdy meldunek to jeden wiersz
    private Zasob zasob;//Zasob
    private Czynnosc czynnosc;//Czynnosc
    private Material material;//Material
    private MaterialDodatkowy materialDodatkowy;//MaterialDodatkowy
    private Odpad odpad;//Odpad
    private Produkt produkt;//Produkt

    public Meldunek(String nrMeldunku, String zlecenie, String operacja, String kodOperacji, String lpOperacji, String idPracownik, String ilosc, String precyzja, String data, String czas, String uwagi, Zasob zasob, Czynnosc czynnosc, Material material, MaterialDodatkowy materialDodatkowy, Odpad odpad, Produkt produkt) {
        this.nrMeldunku = nrMeldunku;
        this.zlecenie = zlecenie;
        this.operacja = operacja;
        this.kodOperacji = kodOperacji;
        this.lpOperacji = lpOperacji;
        this.idPracownik = idPracownik;
        this.ilosc = ilosc;
        this.precyzja = precyzja;
        this.data = data;
        this.czas = czas;
        this.uwagi = uwagi;
        this.zasob = zasob;
        this.czynnosc = czynnosc;
        this.material = material;
        this.materialDodatkowy = materialDodatkowy;
        this.odpad = odpad;
        this.produkt = produkt;
    }

    public Meldunek() {
        this.nrMeldunku = "";
        this.zlecenie = "";
        this.operacja = "";
        this.kodOperacji = "";
        this.lpOperacji = "";
        this.idPracownik = "";
        this.ilosc = "";
        this.precyzja = "";
        this.data = "";
        this.czas = "";
        this.uwagi = "";
        this.zasob = null;
        this.czynnosc = null;
        this.material = null;
        this.materialDodatkowy = null;
        this.odpad = null;
        this.produkt = null;
    }

    //GETTERS 'n' SETTERS
    public String getNrMeldunku() {
        return nrMeldunku;
    }

    public void setNrMeldunku(String nrMeldunku) {
        this.nrMeldunku = nrMeldunku;
    }

    public String getZlecenie() {
        return zlecenie;
    }

    public void setZlecenie(String zlecenie) {
        this.zlecenie = zlecenie;
    }

    public String getOperacja() {
        return operacja;
    }

    public void setOperacja(String operacja) {
        this.operacja = operacja;
    }

    public String getKodOperacji() {
        return kodOperacji;
    }

    public void setKodOperacji(String kodOperacji) {
        this.kodOperacji = kodOperacji;
    }

    public String getLpOperacji() {
        return lpOperacji;
    }

    public void setLpOperacji(String lpOperacji) {
        this.lpOperacji = lpOperacji;
    }

    public String getIdPracownik() {
        return idPracownik;
    }

    public void setIdPracownik(String idPracownik) {
        this.idPracownik = idPracownik;
    }

    public String getIlosc() {
        return ilosc;
    }

    public void setIlosc(String ilosc) {
        this.ilosc = ilosc;
    }

    public String getPrecyzja() {
        return precyzja;
    }

    public void setPrecyzja(String precyzja) {
        this.precyzja = precyzja;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getCzas() {
        return czas;
    }

    public void setCzas(String czas) {
        this.czas = czas;
    }

    public String getUwagi() {
        return uwagi;
    }

    public void setUwagi(String uwagi) {
        this.uwagi = uwagi;
    }

    public Zasob getZasob() {
        return zasob;
    }

    public void setZasob(Zasob zasob) {
        this.zasob = zasob;
    }

    public Czynnosc getCzynnosc() {
        return czynnosc;
    }

    public void setCzynnosc(Czynnosc czynnosc) {
        this.czynnosc = czynnosc;
    }

    public Material getMaterial() {
        return material;
    }

    public void setMaterial(Material material) {
        this.material = material;
    }

    public MaterialDodatkowy getMaterialDodatkowy() {
        return materialDodatkowy;
    }

    public void setMaterialDodatkowy(MaterialDodatkowy materialDodatkowy) {
        this.materialDodatkowy = materialDodatkowy;
    }

    public Odpad getOdpad() {
        return odpad;
    }

    public void setOdpad(Odpad odpad) {
        this.odpad = odpad;
    }

    public Produkt getProdukt() {
        return produkt;
    }

    public void setProdukt(Produkt produkt) {
        this.produkt = produkt;
    }

    @Override
    public void createAsNode(XMLEventWriter eventWriter, int tabValue)throws XMLStreamException{
        XMLEventFactory eventFactory = XMLEventFactory.newInstance();
        XMLEvent endLineEvent = eventFactory.createDTD("\n");
        XMLEvent tabulatorEvent = eventFactory.createDTD("\t");

        //TAG:<Meldunek>
        addTabs(eventWriter, tabValue);
        eventWriter.add(eventFactory.createStartElement("","","Meldunek"));
        eventWriter.add(endLineEvent);

        //składowe Meldunek
        addNode(eventWriter, "NrMeldunku", nrMeldunku, tabValue+1);
        addNode(eventWriter, "Zlecenie", zlecenie, tabValue+1);
        addNode(eventWriter, "Operacja", operacja, tabValue+1);
        addNode(eventWriter, "KodOperacji", kodOperacji, tabValue+1);
        addNode(eventWriter, "LPOperacji", lpOperacji, tabValue+1);
        addNode(eventWriter, "ID_Pracownik", idPracownik, tabValue+1);
        addNode(eventWriter, "Ilosc", ilosc, tabValue+1);
        addNode(eventWriter, "Precyzja", precyzja, tabValue+1);
        addNode(eventWriter, "Data", data,tabValue+1);
        addNode(eventWriter, "Czas", czas, tabValue+1);
        addNode(eventWriter, "Uwagi", uwagi, tabValue+1);
        zasob.createAsNode(eventWriter, tabValue + 1);
        czynnosc.createAsNode(eventWriter, tabValue + 1);
        material.createAsNode(eventWriter, tabValue + 1);
        materialDodatkowy.createAsNode(eventWriter, tabValue + 1);
        odpad.createAsNode(eventWriter, tabValue + 1);
        produkt.createAsNode(eventWriter, tabValue + 1);
        //koniec składowych Meldunek

        //TAG:</Meldunek>
        addTabs(eventWriter, tabValue);
        eventWriter.add(eventFactory.createEndElement("", "", "Meldunek"));
        eventWriter.add(endLineEvent);

//        //TAG: <NrMeldunku>
//        eventWriter.add(eventFactory.createStartElement("", "", "NrMeldunku"));
//        eventWriter.add(eventFactory.createCharacters(nrMeldunku));
//        eventWriter.add(eventFactory.createEndElement("","", "NrMeldunku"));
//        eventWriter.add(endLineEvent);



    }
}